﻿namespace FastColoredTextBoxNS
{
    using System;
    using System.Collections.Generic;
    using System.Text.RegularExpressions;

    public class SyntaxDescriptor : IDisposable
    {
        public char leftBracket = '(';

        public char rightBracket = ')';

        public char leftBracket2 = '{';

        public char rightBracket2 = '}';

        public BracketsHighlightStrategy bracketsHighlightStrategy = BracketsHighlightStrategy.Strategy2;

        public readonly List<Style> styles = new List<Style>();

        public readonly List<RuleDesc> rules = new List<RuleDesc>();

        public readonly List<FoldingDesc> foldings = new List<FoldingDesc>();

        public void Dispose()
        {
            foreach (var style in this.styles)
            {
                style.Dispose();
            }
        }
    }

    public class RuleDesc
    {
        private Regex regex;

        public string pattern;

        public RegexOptions options = RegexOptions.None;

        public Style style;

        public Regex Regex
        {
            get
            {
                if (this.regex == null)
                {
                    this.regex = new Regex(this.pattern, SyntaxHighlighter.RegexCompiledOption | this.options);
                }
                return this.regex;
            }
        }
    }

    public class FoldingDesc
    {
        public string startMarkerRegex;

        public string finishMarkerRegex;

        public RegexOptions options = RegexOptions.None;
    }
}